﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using KimberlyDashboardLIB;
using System.Globalization;
using System.Text;
using System.Drawing;
using System.IO;

namespace KimberlyDashboard
{
    public partial class Dashboard : System.Web.UI.Page
    {
        private KimberlyDashboardLIB.Dashboard das = new KimberlyDashboardLIB.Dashboard();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.lblIndicador1.Text = "Infull y Ontime";
                this.lblIndicador2.Text = "Clientes en política de servicio y Cumplimiento plan producción";
                this.lblIndicador5.Text = "DIO";
                this.lblIndicador7.Text = "OTIF proveedores materias primas Local";
                this.lblIndicador8.Text = "SKUs 95%NS";
                this.lblIndicador9.Text = "Precisión Forecast Top 35";
                this.lblIndicador10.Text = "NS Gastos -no fletes-";
                this.lblIndicador11.Text = "Extra gasto vs py -no fletes- YTD";

                this.GetValores();
                this.CargarAnos();                
                this.CargarMeses();
                             
                Session["COLOR"] = 0;                
                this.ScriptsTacometros();                
                this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
            }
        }

        #region "Utilitarios"
        
        /// <summary>
        /// Retorna el string que le llega como un entero, quitandole las comas
        /// </summary>
        /// <param name="valor"></param>
        /// <returns></returns>
        private Int32 QuitarComas(string valor)
        {
            if (valor.IndexOf(",") > -1)
                valor = valor.Substring(0, valor.IndexOf(","));
            if (valor.IndexOf(".") > -1)
                valor = valor.Substring(0, valor.IndexOf("."));

            return Convert.ToInt32(valor);
        }

        private void CambiarColor()
        {
            string[] arrColores = { "#FFFFFF", "#E0E0E0", "#F0EDBC", "#CBDBB1", "#A2C9EA" };
            this.tablaClientes.BgColor = arrColores[Convert.ToInt32(Session["COLOR"])];
            this.tablaCapitalTrabajo.BgColor = arrColores[Convert.ToInt32(Session["COLOR"])];
            this.tablaProcesosLogisticos.BgColor = arrColores[Convert.ToInt32(Session["COLOR"])];
            this.tablaArchivos.BgColor = arrColores[Convert.ToInt32(Session["COLOR"])];
            this.ScriptsTacometros();
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        private void LlenarDropDownList(DropDownList drp, DataTable dt, string valorSeleccionado)
        {
            drp.DataSource = dt;
            drp.DataValueField = dt.Columns[0].ColumnName;
            drp.DataTextField = dt.Columns[1].ColumnName;
            drp.DataBind();
            drp.SelectedValue = valorSeleccionado;
        }

        private void CargarAnos()
        {
            int ano = DateTime.Now.Year - 3;
            DataTable dt = new DataTable();
            dt.Columns.Add("valor");
            dt.Columns.Add("ano");
            DataRow dr;
            for (int i = ano; i < ano + 5; i++)
            {
                dr = dt.NewRow();
                dr["valor"] = i.ToString();
                dr["ano"] = i.ToString();
                dt.Rows.Add(dr);
            }
            this.LlenarDropDownList(this.drpAnoInd1, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia1, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAno1, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd2, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia2, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd3, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia3, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd4, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia4, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAno5, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd7, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia7, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd8, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia8, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd9, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia9, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoInd10, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAnoTendencia10, dt, DateTime.Now.Year.ToString());
            this.LlenarDropDownList(this.drpAno11, dt, DateTime.Now.Year.ToString());            
        }

        private void CargarQs()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("valor");
            dt.Columns.Add("q");
            DataRow dr;
            for (int i = 1; i < 5; i++)
            {
                dr = dt.NewRow();
                dr["valor"] = i.ToString();
                dr["q"] = i.ToString();
                dt.Rows.Add(dr);
            }
            //Se obtiene el ultimo Q
            int mesActual = DateTime.Now.Month;
            int ultimoQ = (mesActual / 3);

            this.LlenarDropDownList(this.drpMesInd1, dt, ultimoQ.ToString());
            this.LlenarDropDownList(this.drpMesInd2, dt, ultimoQ.ToString());
            this.LlenarDropDownList(this.drpMesInd3, dt, ultimoQ.ToString());
            this.LlenarDropDownList(this.drpMesInd4, dt, ultimoQ.ToString());            
            this.LlenarDropDownList(this.drpMesInd7, dt, ultimoQ.ToString());
            this.LlenarDropDownList(this.drpMesInd8, dt, ultimoQ.ToString());
            this.LlenarDropDownList(this.drpMesInd9, dt, ultimoQ.ToString());
            this.LlenarDropDownList(this.drpMesInd10, dt, ultimoQ.ToString());
        }

        private void CargarMeses()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("valor");
            dt.Columns.Add("mes");
            DataRow dr;
            for (int i = 1; i < 13; i++)
            {
                dr = dt.NewRow();
                dr["valor"] = i.ToString();
                dr["mes"] = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i).Substring(0,3);
                dt.Rows.Add(dr);                
            }
            int valorSeleccionado = DateTime.Now.Month - 1;
            if (valorSeleccionado == 0)
                valorSeleccionado = 12;

            this.LlenarDropDownList(this.drpMesInd1, dt, valorSeleccionado.ToString());
            this.LlenarDropDownList(this.drpMesInd2, dt, valorSeleccionado.ToString());
            this.LlenarDropDownList(this.drpMesInd3, dt, valorSeleccionado.ToString());
            this.LlenarDropDownList(this.drpMesInd4, dt, valorSeleccionado.ToString());            
            this.LlenarDropDownList(this.drpMesInd7, dt, valorSeleccionado.ToString());
            this.LlenarDropDownList(this.drpMesInd8, dt, valorSeleccionado.ToString());
            this.LlenarDropDownList(this.drpMesInd9, dt, valorSeleccionado.ToString());
            this.LlenarDropDownList(this.drpMesInd10, dt, valorSeleccionado.ToString());
        }

        private void GetValores()
        {            
            //Guarda en session las tablas
            Session["MES"] = this.das.GetValores(Enumeraciones.Valores.VALORMES).Tables[0];
            Session["Q"] = this.das.GetValores(Enumeraciones.Valores.VALORQ).Tables[0];
            Session["META"] = this.das.GetValores(Enumeraciones.Valores.VALORMETA).Tables[0];
            //Se obtienen lo indicadores
            Session["INDICADORES"] = this.das.GetIndicadores(0).Tables[0];
        }

        /// <summary>
        /// Oculta las tablas dependiendo del tab seleccionado
        /// </summary>
        private void OcultarTablas()
        {
            this.tablaClientes.Visible = false;
            this.tablaCapitalTrabajo.Visible = false;
            this.tablaProcesosLogisticos.Visible = false;
            this.tablaArchivos.Visible = false;
            switch (this.tabContainer1.ActiveTabIndex)
            { 
                case 0:
                    this.tablaClientes.Visible = true;
                    break;
                case 1:
                    this.tablaCapitalTrabajo.Visible = true;
                    break;
                case 2:
                    this.tablaProcesosLogisticos.Visible = true;
                    break;
                case 3:
                    this.tablaArchivos.Visible = true;
                    break;
            }
        }

        private void MostrarArchivos()
        {
            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("ARCHIVO");
                dt.Columns.Add("FECHA");

                //recorre la carpeta archivosDatos y va agregando los archivos al dataTable
                DataRow dr;
                string[] archivos = Directory.GetFiles(Server.MapPath("~/archivosDatos"));                
                foreach (string a in archivos)
                {                    
                    dr = dt.NewRow();
                    dr["ARCHIVO"] = Path.GetFileName(a);
                    dr["FECHA"] = File.GetLastWriteTime(a);
                    dt.Rows.Add(dr);
                }

                this.grdArchivos.DataSource = dt;
                this.grdArchivos.DataBind();
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se pudo cargar la información de los archivos exsistentes: " + Utilidades.FormatearMensajeError(ex.Message) + "'); </Script>");
            }
        }

        #endregion

        #region "Graficos"
        
        private void GraficarBarras(int tab)
        {
            //Dependiendo del tab en el que se está se invoca a la funcion correspondiente
            if (tab == 0)
            {
                this.GraficoBarras(tab);
                this.GraficarTendencia(1, Convert.ToInt32(this.drpAnoTendencia1.SelectedValue));
                this.GraficarTendencia(2, Convert.ToInt32(this.drpAnoTendencia2.SelectedValue));
                this.GraficarTendencia(3, Convert.ToInt32(this.drpAnoTendencia3.SelectedValue));
                this.GraficarTendencia(4, Convert.ToInt32(this.drpAnoTendencia4.SelectedValue));
            }            
            else if (tab == 1)
            {
                this.GraficoBarrasDoble(tab);
                this.GraficarTendencia(7, Convert.ToInt32(this.drpAnoTendencia7.SelectedValue));
                this.GraficarTendencia(8, Convert.ToInt32(this.drpAnoTendencia8.SelectedValue));
                this.GraficarTendencia(9, Convert.ToInt32(this.drpAnoTendencia9.SelectedValue));
            }
            else if (tab == 2)
            {
                this.GraficoArea(tab);
                this.GraficarTendencia(10, Convert.ToInt32(this.drpAnoTendencia10.SelectedValue));
            }
            
        }
        
        private void GraficarTendencia(int idIndicador, int ano)
        { 
            //Se obtienen los valores del indicador
            DataSet dtsValores = this.das.GetValores(Enumeraciones.Valores.VALORMES, ano, ano, 1, 12, idIndicador);

            DataTable dt = new DataTable();
            dt.Columns.Add("Mes");
            dt.Columns.Add("Valor");            
            DataRow dr;
            DataRow[] arrDr;
            for (int i = 1; i < 13; i++)
            {
                dr = dt.NewRow();
                dr["Mes"] = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i).Substring(0, 3);

                arrDr = dtsValores.Tables[0].Select("Mes=" + i.ToString());
                if (arrDr.Length > 0)
                {
                    dr["Valor"] = Convert.ToDouble(arrDr[0]["Valor"].ToString()) * 100;
                    dr["Valor"] = dr["Valor"].ToString().Replace(",", ".");
                    dt.Rows.Add(dr);
                }                
                //else
                //    dr["Valor"] = "0";

            }

            Dundas.Charting.WebControl.Chart chart = null;
            int maximo = 110;
            int minimo = 0;
            switch (idIndicador)
            { 
                case 1:
                    chart = this.chtIndicador1;
                    minimo = 40;
                    break;
                case 2:
                    chart = this.chtIndicador2;
                    minimo = 40;
                    break;
                case 3:
                    chart = this.chtIndicador3;
                    minimo = 40;
                    break;
                case 4:
                    chart = this.chtIndicador4;
                    minimo = 40;
                    break;
                case 7:
                    chart = this.chtIndicador7;
                    break;
                case 8:
                    chart = this.chtIndicador8;
                    break;
                case 9:
                    chart = this.chtIndicador9;
                    break;
                case 10:
                    chart = this.chtIndicador10;
                    maximo = 20;
                    break;
            }

            chart.DataSource = dt;            
            chart.Series["Valor"].ValueMemberX = "Mes";
            chart.Series["Valor"].ValueMembersY = "Valor";

            chart.ChartAreas["Default"].AxisY.Maximum = maximo;
            chart.ChartAreas["Default"].AxisY.Minimum = minimo;
            chart.ChartAreas["Default"].AxisY.LabelStyle.Format = "p";
            chart.Series["Valor"].ToolTip = "#VALX: #VALY{P}";

            chart.DataBind();
        }

        private void GraficoBarras(int tab)
        {
            DataSet dtsValores = this.das.GetValores(Enumeraciones.Valores.VALORMES, Convert.ToInt32(this.drpAno1.SelectedValue), Convert.ToInt32(this.drpAno1.SelectedValue), 1, 12, "1,2");

            DataTable dt = new DataTable();
            dt.Columns.Add("Mes");
            dt.Columns.Add("Infull");
            dt.Columns.Add("Ontime");
            DataRow dr;            
            DataRow[] arrDr;
            for (int i = 1; i < 13; i++)
            {
                dr = dt.NewRow();
                dr["Mes"] = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i).Substring(0, 3);

                arrDr = dtsValores.Tables[0].Select("IdIndicador=1 AND Mes=" + i.ToString());
                if (arrDr.Length > 0)
                    dr["Infull"] = Convert.ToDouble(arrDr[0]["Valor"].ToString()) * 100;
                else
                    dr["Infull"] = "0";

                arrDr = dtsValores.Tables[0].Select("IdIndicador=2 AND Mes=" + i.ToString());
                if (arrDr.Length > 0)
                    dr["Ontime"] = Convert.ToDouble(arrDr[0]["Valor"].ToString()) * 100;
                else
                    dr["Ontime"] = "0";


                dr["Infull"] = dr["Infull"].ToString().Replace(",", ".");
                dr["Ontime"] = dr["Ontime"].ToString().Replace(",", ".");

                dt.Rows.Add(dr);                    
            }


            this.chtInfull.DataSource = dt;
            this.chtInfull.Series["Infull"].ValueMemberX = "Mes";
            this.chtInfull.Series["Infull"].ValueMembersY = "Infull";
            this.chtInfull.Series["Ontime"].ValueMemberX = "Mes";
            this.chtInfull.Series["Ontime"].ValueMembersY = "Ontime";

            //this.chtInfull.Series["Infull"].ShowLabelAsValue = true;
            //this.chtInfull.Series["Ontime"].ShowLabelAsValue = true;

            this.chtInfull.ChartAreas["Default"].AxisY.Maximum = 120;
            this.chtInfull.ChartAreas["Default"].AxisY.LabelStyle.Format = "p";            
            this.chtInfull.Series["Infull"].ToolTip = "Valor: #VALY{P}";
            this.chtInfull.Series["Ontime"].ToolTip = "Valor: #VALY{P}";

            this.chtInfull.DataBind();

        }

        /// <summary>
        /// Carga los datos a un grafico de barras que tiene dos chartAreas
        /// </summary>
        /// <param name="tab"></param>
        private void GraficoBarrasDoble(int tab)
        {
            DataSet dtsValores = this.das.GetValores(Enumeraciones.Valores.VALORMES, Convert.ToInt32(this.drpAno5.SelectedValue), Convert.ToInt32(this.drpAno5.SelectedValue), 1, 12, "5,6");

            DataTable dt = new DataTable();
            dt.Columns.Add("Mes");
            dt.Columns.Add("DIO");
            dt.Columns.Add("ValorInventario");
            DataRow dr;
            DataRow[] arrDr;
            bool agregar = false;
            for (int i = 1; i < 13; i++)
            {
                agregar = false;
                dr = dt.NewRow();
                dr["Mes"] = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i).Substring(0, 3);

                arrDr = dtsValores.Tables[0].Select("IdIndicador=5 AND Mes=" + i.ToString());
                if (arrDr.Length > 0)    
                {
                    dr["DIO"] = this.QuitarComas(arrDr[0]["Valor"].ToString()).ToString();
                    dr["DIO"] = dr["DIO"].ToString().Replace(",", ".");
                    agregar = true;
                }                
                //else
                //    dr["DIO"] = "0";

                arrDr = dtsValores.Tables[0].Select("IdIndicador=6 AND Mes=" + i.ToString());                
                if (arrDr.Length > 0)
                {
                    dr["ValorInventario"] = this.QuitarComas(arrDr[0]["Valor"].ToString()).ToString();
                    dr["ValorInventario"] = dr["ValorInventario"].ToString().Replace(",", ".");
                    agregar = true;
                }                
                //else
                //    dr["ValorInventario"] = "0";                                

                if (agregar)
                    dt.Rows.Add(dr);
            }


            this.chtDIO.DataSource = dt;
            this.chtDIO.Series["DIO"].ValueMemberX = "Mes";
            this.chtDIO.Series["DIO"].ValueMembersY = "DIO";
            this.chtDIO.Series["ValorInventario"].ValueMemberX = "Mes";
            this.chtDIO.Series["ValorInventario"].ValueMembersY = "ValorInventario";
            
            this.chtDIO.ChartAreas["Default"].AxisY.Maximum = 80;
            this.chtDIO.ChartAreas["Default"].AxisY.LabelStyle.Format = "N0";
            this.chtDIO.ChartAreas["Default"].AxisY2.Maximum = 50000;
            this.chtDIO.ChartAreas["Default"].AxisY2.LabelStyle.Format = "C0";

            this.chtDIO.Series["DIO"].ToolTip = "#VALX: #VALY{N0}";
            this.chtDIO.Series["ValorInventario"].ToolTip = "Valor: #VALY{C0}";

            //Se asignan las series al chartArea correspondiente
            //this.chtDIO.Series["DIO"].ChartArea = "Default";
            //this.chtDIO.Series["ValorInventario"].ChartArea = "ValorInventario";

            this.chtDIO.DataBind();

        }

        /// <summary>
        /// Carga los datos en un grafico de area
        /// </summary>
        /// <param name="tab"></param>
        private void GraficoArea(int tab)
        {
            DataSet dtsValores = this.das.GetValores(Enumeraciones.Valores.VALORMES, Convert.ToInt32(this.drpAno11.SelectedValue), Convert.ToInt32(this.drpAno11.SelectedValue), 1, 12, 11);

            DataTable dt = new DataTable();
            dt.Columns.Add("Mes");
            dt.Columns.Add("ExtraGasto");            
            DataRow dr;
            DataRow[] arrDr;
            for (int i = 1; i < 13; i++)
            {
                dr = dt.NewRow();
                dr["Mes"] = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i).Substring(0, 3);

                arrDr = dtsValores.Tables[0].Select("IdIndicador=11 AND Mes=" + i.ToString());
                if (arrDr.Length > 0)
                    dr["ExtraGasto"] = this.QuitarComas(arrDr[0]["Valor"].ToString()).ToString();
                else
                    dr["ExtraGasto"] = "0";

                dr["ExtraGasto"] = dr["ExtraGasto"].ToString().Replace(",", ".");                

                dt.Rows.Add(dr);
            }

            this.chtExtraGasto.DataSource = dt;
            this.chtExtraGasto.Series["ExtraGasto"].ValueMemberX = "Mes";
            this.chtExtraGasto.Series["ExtraGasto"].ValueMembersY = "ExtraGasto";            
            
            this.chtExtraGasto.ChartAreas["Default"].AxisY.Maximum = 800;
            this.chtExtraGasto.ChartAreas["Default"].AxisY.Minimum = -800;
            this.chtExtraGasto.ChartAreas["Default"].AxisY.LabelStyle.Format = "C0";
            this.chtExtraGasto.Series["ExtraGasto"].ToolTip = "Valor: #VALY{C0}";            

            this.chtExtraGasto.DataBind();
        }

        #endregion

        #region "Tacometros"
        
        private void ScriptsTacometros()
        {
            this.OcultarTablas();

            //La perspectiva que se trabaja depende del tab que esta activo
            int idPerspectiva = this.tabContainer1.ActiveTabIndex + 1;

            StringBuilder strScript = new StringBuilder();
            StringBuilder strInicio = new StringBuilder();          //Para invocar a la funcion que setea los valores iniciales
            strScript.AppendLine("<script language='javascript'>");

            //Valores que quedan seleccionados por defecto en los dropdownlist
            int mesSeleccionado = DateTime.Now.Month - 1;
            if (mesSeleccionado == 0)
                mesSeleccionado = 12;            
            int qSeleccionado = (DateTime.Now.Month / 3);

            //Se recorren los indicadores
            DataTable dtIndicadores = (DataTable)Session["INDICADORES"];
            DataTable dttMes = (DataTable)Session["MES"];
            DataTable dttQ = (DataTable)Session["Q"];
            DataRow[] arrDr;
            DataRow[] arrDrQ;
            string unidadMedida;
            double valor = 0;
            string strValorMes = "";
            string strValorQ = "";
            string strValor = "";
            for (int i = 0; i < dtIndicadores.Rows.Count; i++)
            {
                //Si el indicador no es de tacometro no se hace nada
                if ((dtIndicadores.Rows[i]["Graficodefecto"].ToString().Equals("TACOMETRO")) && (Convert.ToInt32(dtIndicadores.Rows[i]["IdPerspectiva"].ToString()) == idPerspectiva))
                {
                    unidadMedida = dtIndicadores.Rows[i]["UnidadMedida"].ToString();

                    //Inicializacion de los tacometros
                    strScript.AppendLine("var gaugeDivInd" + dtIndicadores.Rows[i]["Id"].ToString() + " = bindows.loadGaugeIntoDiv(\"gauges/perspectiva" + dtIndicadores.Rows[i]["IdPerspectiva"].ToString() + ".xml\", \"gaugeDivInd" + dtIndicadores.Rows[i]["Id"].ToString() + "\");");

                    //Se recorren los valroes mensuales del indicador y se contruye un arreglo
                    arrDr = dttMes.Select("IdIndicador = " + dtIndicadores.Rows[i]["Id"].ToString());
                    if (arrDr.Length > 0)
                    {
                        strScript.AppendLine("var arrMes" + dtIndicadores.Rows[i]["Id"].ToString() + " = new Array(" + arrDr.Length + ");");
                        for (int j = 0; j < arrDr.Length; j++)
                        {
                            switch (unidadMedida)
                            {
                                case "PORCENTAJE":
                                    valor = Convert.ToDouble(arrDr[j]["Valor"].ToString()) * 100;
                                    break;
                                case "CANTIDAD":
                                    valor = this.QuitarComas(arrDr[j]["Valor"].ToString());
                                    break;
                                case "DINERO":
                                    valor = this.QuitarComas(arrDr[j]["Valor"].ToString());
                                    break;
                            }
                            strValor = String.Format("{0:0.0}", valor).Replace(",", ".");                            

                            //Agrega los valores, concatenando año, mes y valor
                            strScript.AppendLine("arrMes" + dtIndicadores.Rows[i]["Id"].ToString() + "[" + j + "] = '" + arrDr[j]["Ano"].ToString() + "_" + arrDr[j]["Mes"].ToString() + "_" + strValor + "';");

                            //Se toma el valor que quedara seleccionado al cargar la pagina (año actual y mes anterior)
                            if ((Convert.ToInt32(arrDr[j]["Ano"].ToString()) == DateTime.Now.Year) && (Convert.ToInt32(arrDr[j]["Mes"].ToString()) == mesSeleccionado))
                                strValorMes = strValor;
                        }
                    }

                    //Se recorren los valores Q del indicador y se contruye un arreglo
                    arrDrQ = dttQ.Select("IdIndicador = " + dtIndicadores.Rows[i]["Id"].ToString());
                    if (arrDrQ.Length > 0)
                    {
                        strScript.AppendLine("var arrQ" + dtIndicadores.Rows[i]["Id"].ToString() + " = new Array(" + arrDrQ.Length + ");");
                        for (int j = 0; j < arrDrQ.Length; j++)
                        {
                            switch (unidadMedida)
                            {
                                case "PORCENTAJE":
                                    valor = Convert.ToDouble(arrDrQ[j]["Valor"].ToString()) * 100;
                                    break;
                                case "CANTIDAD":
                                    valor = this.QuitarComas(arrDrQ[j]["Valor"].ToString());
                                    break;
                                case "DINERO":
                                    valor = this.QuitarComas(arrDrQ[j]["Valor"].ToString());
                                    break;
                            }
                            strValor = String.Format("{0:0.0}", valor).Replace(",", ".");

                            //Agrega los valores, concatenando año, mes y valor
                            strScript.AppendLine("arrQ" + dtIndicadores.Rows[i]["Id"].ToString() + "[" + j + "] = '" + arrDrQ[j]["Ano"].ToString() + "_" + arrDrQ[j]["Q"].ToString() + "_" + strValor + "';");

                            //Se toma el valor que quedara seleccionado al cargar la pagina (año actual y mes anterior)
                            if ((Convert.ToInt32(arrDrQ[j]["Ano"].ToString()) == DateTime.Now.Year) && (Convert.ToInt32(arrDrQ[j]["Q"].ToString()) == qSeleccionado))
                                strValorQ = strValor;
                        }
                    }

                    //Para setear valores iniciales en los tacometros                    
                    strInicio.AppendLine("gaugeDivInd" + dtIndicadores.Rows[i]["Id"].ToString() + ".needle.setValue(\"" + strValorMes + " \");");
                    strInicio.AppendLine("gaugeDivInd" + dtIndicadores.Rows[i]["Id"].ToString() + ".label.setText(\"" + strValorMes + "\");");
                }                   
            }
            
            //Construye la funcion updateGauge
            strScript.AppendLine("function updateGauge(ano, mes, idIndicador, tipo, combo) {");
            strScript.AppendLine("radio = document.getElementById('ctl00_ContentPlaceHolder1_rbtnInd' + idIndicador + 'Mes');");
            strScript.AppendLine("if (radio.checked == true)");
            strScript.AppendLine("tipo = 'MES';");
            strScript.AppendLine("else");
            strScript.AppendLine("tipo = 'Q';");            

            strScript.AppendLine("if (ano == 0) {");
            strScript.AppendLine("if (tipo == 'MES')");
            strScript.AppendLine("{");            
            strScript.AppendLine("eval(\"var arreglo = arrMes\" + idIndicador);");
            strScript.AppendLine("}");
            strScript.AppendLine("else");
            strScript.AppendLine("{");            
            strScript.AppendLine("eval(\"var arreglo = arrQ\" + idIndicador);");
            strScript.AppendLine("}");            
            strScript.AppendLine("drp = document.getElementById(combo.id.replace('drpMesInd', 'drpAnoInd'));");
            strScript.AppendLine("ano = drp.value;");            
            strScript.AppendLine("}");

            strScript.AppendLine("else if (mes == 0) {");
            strScript.AppendLine("if (tipo == 'MES')");
            strScript.AppendLine("{");            
            strScript.AppendLine("eval(\"var arreglo = arrMes\" + idIndicador);");
            strScript.AppendLine("}");
            strScript.AppendLine("else");
            strScript.AppendLine("{");            
            strScript.AppendLine("eval(\"var arreglo = arrQ\" + idIndicador);");
            strScript.AppendLine("}");            
            strScript.AppendLine("drp = document.getElementById(combo.id.replace('drpAnoInd', 'drpMesInd'));");
            strScript.AppendLine("mes = drp.value;");
            strScript.AppendLine("}");                                    
            
            strScript.AppendLine("var valor = 0;");
            strScript.AppendLine("var miniArreglo = new Array();");
            strScript.AppendLine("for (i = 0; i < arreglo.length; i++) {");
            strScript.AppendLine("miniArreglo = arreglo[i].split('_');");
            strScript.AppendLine("if (ano == miniArreglo[0] && mes == miniArreglo[1]) {");
            strScript.AppendLine("valor = miniArreglo[2];");
            strScript.AppendLine("}");
            strScript.AppendLine("}");
                        
            strScript.AppendLine("eval(\"gaugeDivInd\" + idIndicador + \".needle.setValue(\" + valor + \")\");");
            strScript.AppendLine("eval(\"gaugeDivInd\" + idIndicador + \".label.setText(\" + valor + \")\");");            
         
            strScript.AppendLine("}");  
          
            //se agregan los llamados a la funcion de inicio para setear valores iniciales
            strScript.AppendLine(strInicio.ToString());            

            strScript.AppendLine("</script>");
           
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Tacometro", strScript.ToString());
        }

        #endregion

        #region "Eventos"

        protected void btnColor1_Click(object sender, ImageClickEventArgs e)
        {
            Session["COLOR"] = 0;
            this.CambiarColor();
        }

        protected void btnColor2_Click(object sender, ImageClickEventArgs e)
        {
            Session["COLOR"] = 1;
            this.CambiarColor();
        }

        protected void btnColor3_Click(object sender, ImageClickEventArgs e)
        {
            Session["COLOR"] = 2;
            this.CambiarColor();
        }

        protected void btnColor4_Click(object sender, ImageClickEventArgs e)
        {
            Session["COLOR"] = 3;
            this.CambiarColor();
        }

        protected void btnColor5_Click(object sender, ImageClickEventArgs e)
        {
            Session["COLOR"] = 4;
            this.CambiarColor();
        }

        /// <summary>
        /// Este evento se diapara cuando hay cambio en el tab seleccionado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tabContainer1_ActiveTabChanged(object sender, EventArgs e)
        {            
            if (this.tabContainer1.ActiveTabIndex == 3)
            {
                this.OcultarTablas();
                this.MostrarArchivos();
            }
            else
            {
                this.ScriptsTacometros();
                this.GraficarBarras(this.tabContainer1.ActiveTabIndex);            
            }
        }


        protected void drpAno1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);            
        }

        protected void drpAnoTendencia2_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia3_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia4_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAno5_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia7_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia8_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia9_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        protected void drpAnoTendencia10_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.GraficarBarras(this.tabContainer1.ActiveTabIndex);
        }

        #endregion







    }
}